/*******************************************************************************
 * Copyleft (c) 2021 Kcode
 *
 * @file    convert_manager.h
 * @brief   视频转换管理者头文件，向下支持各种转换方式，向上提供接口
 * @author  K
 * @version 0.0.1
 * @date    2021-07-26
 * @license MulanPSL-1.0
 *
 * 文件修改历史：
 * <时间>       | <版本>    | <作者>  | <描述>
 * 2021-07-26   | v0.0.1    | Kcode   | 视频转换管理者头文件
 * -----------------------------------------------------------------------------
 ******************************************************************************/

#ifndef _CONVERT_MANAGER_H
#define _CONVERT_MANAGER_H

#include "config.h"
#include "video_manager.h"

/*!
 * 数据转换操作
 */
typedef struct VideoConvertOpr {

    char *name;
    /* 支持的格式 */
    int (*isSupport)(int pixel_format_in, int pixel_format_out);

    /* 格式转换 */
    int (*Convert)(PT_VIDEOBUF videobuf_in, PT_VIDEOBUF videobuf_out);

    /* 退出 */
    int (*ConvertExit)(PT_VIDEOBUF videobuf_out);

    struct VideoConvertOpr *ptNext;
}T_VIDEOCONVERTOPR, *PT_VIDEOCONVERTOPR;

/* 获取支持格式的转换处理结构体 */
PT_VIDEOCONVERTOPR GetVIdeoConvertForFormats(int pixel_format_in,
                                            int pixel_format_out);

/*!
 * @brief  注册函数
 * @return 0：成功 -1：失败
 */
int RegisterVideoConvertOpr(PT_VIDEOCONVERTOPR ptConvertOpr);

/*!
 * @brief  初始化函数，把对支持的各个设备进行初始化工作
 *         对应的结构体放入链表统一管理
 * @return  0：初始化成功 1：失败
 */
int VideoConvertInit(void);

/*!
 * @brief  退出函数，清理转换格式文件的操作
 * @return  无
 */
void VideoConvertExit(char *name, PT_VIDEOBUF convert_buf);

/*!
 * @brief  初始化函数，把对支持的各个转换格式进行初始化工作
 *         对应的结构体放入链表统一管理
 * @return  0：初始化成功 1：失败
 */
int Yuv2RgbInit(void);

/*!
 * @brief  初始化函数，把对支持的各个转换格式进行初始化工作
 *         对应的结构体放入链表统一管理
 * @return  0：初始化成功 1：失败
 */
int Rgb2RgbInit(void);

/*!
 * @brief  初始化函数，把对支持的各个转换格式进行初始化工作
 *         对应的结构体放入链表统一管理
 * @return  0：初始化成功 1：失败
 */
int Mjpeg2RgbInit(void);

#endif /* _CONVERT_MANAGER_H */
